
const protocol = window.location.protocol;  // 获取协议 (http or https)
const hostname = window.location.hostname;  // 获取IP地址或主机名
const port = window.location.port;          // 获取端口号 (如果有)
const apiPath = import.meta.env.VITE_API_BASE_URL; // 从 .env.development 中读取 API 路径

export const getBaseUrl = () => {
  if (port) {
    return `${protocol}//${hostname}:${port}${apiPath}`;
  } else {
    return `${protocol}//${hostname}${apiPath}`;  // 没有端口的情况
  }
};


// 简单下载图片 url "/illustrations/1832976363721109506/1.png"  ---- '/'必须
// const downloadTasks = fileList.map(e =>
//   urlDownload(e.filePath, e.icnTitle + e.fileFormat)
// );

// // 使用 Promise.all 等待所有下载任务完成
// try {
//   await Promise.all(downloadTasks);
//   ElMessage.success('全部文件下载完毕');
// } catch (error) {ElMessage.error('部分文件下载失败');}
export const urlDownload = (downloadUrl, name) => {
  return new Promise((resolve, reject) => {
    if (!downloadUrl) {
      warnMessage("下载地址为空");
      return reject("下载地址为空");
    }

    // 使用环境变量动态拼接前缀
    const baseUrl = getBaseUrl();
    const url = baseUrl + downloadUrl;
    const fileName = name;

    let xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.responseType = "blob";

    xhr.onload = function () {
      if (xhr.status === 200) {
        const url = window.URL.createObjectURL(xhr.response);
        let a = document.createElement("a");
        a.href = url;
        a.download = fileName;
        a.click();
        resolve();  // 下载完成，resolve Promise
      } else {
        reject(`下载失败`);
      }
    };

    xhr.onerror = function () {
      reject('下载请求出错');
    };

    xhr.send();
  });
};


// 接口下载 Blob
// 接口icnEntityDownload 设置 responseType: "blob",
// const response = await icnEntityDownload(id);
// try {
//   const response = await icnEntityDownload({id});
//   await downloadFile(response, filename);
// } catch (e) {}
export function downloadFile(response, filename) {
  if (!response) {
    console.error('下载失败，响应为空');
    return
  }
  try {
    // // 如果数据是 Blob 类型，直接使用
    const blob = response instanceof Blob ? response : new Blob([response], {
      type: 'application/octet-stream'
    }); // 设置文件类型，这里假设是二进制流文件
    if ('download' in document.createElement('a')) {
      // 创建并设置 a 标签
      let linkElement = document.createElement('a');
      // 生成下载链接
      linkElement.href = window.URL.createObjectURL(blob)
      linkElement.setAttribute('download', filename);//定义文件名
      linkElement.setAttribute('target', '_blank');
      // 模拟点击 a 标签以触发下载
      linkElement.click();
      // 清除 ObjectURL 对象，防止内存泄漏
      window.URL.revokeObjectURL(linkElement.href);
      return;
    } else {
      // 旧版浏览器
      navigator.msSaveBlob(blob, filename);
    }
  } catch (e) {
    console.error('下载失败', e);
    throw e; // 抛出异常，供调用方处理
  }
}
